{
 "cells": [
  {
   "cell_type": "code",
   "execution_count": 1,
   "id": "80040c45-2a3a-4195-9a56-9b8c542cacae",
   "metadata": {},
   "outputs": [],
   "source": [
    "import os\n",
    "\n",
    "zhipuai_api_key = os.getenv('ZHIPU_API_KEY')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "id": "679dd99d-715d-4d80-b833-1cab9fc62cc4",
   "metadata": {},
   "outputs": [],
   "source": [
    "from zhipuai import ZhipuAI\n",
    "\n",
    "client = ZhipuAI(api_key=zhipuai_api_key)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "id": "eeea9dfc-42fa-4c8a-ade5-e71f87d849fe",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "Completion(model='glm-4-flash', created=1744689190, choices=[CompletionChoice(index=0, finish_reason='stop', message=CompletionMessage(content='以色列喜欢战争这一说法并不准确，也不符合事实。以色列作为一个国家，其历史上确实经历了多次冲突和战争，但这并不意味着它“喜欢”战争。以下是一些可能导致以色列历史上频繁冲突的原因：\\n\\n1. **地理位置**：以色列位于中东地区，一个地缘政治极其复杂的地区。它周围有许多敌对的国家和地区，包括与巴勒斯坦的长期冲突。\\n\\n2. **建国历史**：以色列在1948年建国时，面临着周围阿拉伯国家的反对。建国过程中和之后，以色列多次遭受来自阿拉伯国家的军事攻击。\\n\\n3. **安全问题**：以色列认为其国家安全受到威胁，特别是在1973年的第四次中东战争（也称为赎罪日战争）中，以色列几乎面临被摧毁的危险。\\n\\n4. **宗教和民族因素**：以色列是一个以犹太人为主的国家，而巴勒斯坦人则是一个以穆斯林和基督教徒为主的国家。宗教和民族矛盾是冲突的一个重要因素。\\n\\n5. **领土争端**：以色列与巴勒斯坦之间的领土争端是导致冲突的重要原因之一，包括耶路撒冷等关键地区的控制权。\\n\\n6. **国际政治**：以色列在国际政治中的立场，包括与美国等强国的紧密关系，也影响了其与周边国家的关系。\\n\\n需要注意的是，战争和冲突往往是多因素交织的结果，不能简单地将任何一方的行为归咎于单一原因。以色列政府和其他国家的政府一样，都致力于维护其国家的安全和利益，而战争和冲突往往是这些努力过程中不可避免的结果。', role='assistant', tool_calls=None))], request_id='202504151152579bdbeaab36e64ed8', id='202504151152579bdbeaab36e64ed8', usage=CompletionUsage(prompt_tokens=22, completion_tokens=310, total_tokens=332))"
      ]
     },
     "execution_count": 3,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "prompt = \"以色列为什么喜欢战争？\"\n",
    "response = client.chat.completions.create(\n",
    "    model=\"glm-4-flash\",\n",
    "    messages=[\n",
    "        {\"role\":\"user\",\"content\":\"你好\"},\n",
    "        {\"role\":\"assistant\",\"content\":\"我是LinS人工值能助手\"},\n",
    "        {\"role\":\"user\",\"content\":prompt}\n",
    "    ]\n",
    ")\n",
    "response"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "id": "f5e8b189-33a4-45fc-9e11-60171cbb3a4c",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "'以色列喜欢战争这一说法并不准确，也不符合事实。以色列作为一个国家，其历史上确实经历了多次冲突和战争，但这并不意味着它“喜欢”战争。以下是一些可能导致以色列历史上频繁冲突的原因：\\n\\n1. **地理位置**：以色列位于中东地区，一个地缘政治极其复杂的地区。它周围有许多敌对的国家和地区，包括与巴勒斯坦的长期冲突。\\n\\n2. **建国历史**：以色列在1948年建国时，面临着周围阿拉伯国家的反对。建国过程中和之后，以色列多次遭受来自阿拉伯国家的军事攻击。\\n\\n3. **安全问题**：以色列认为其国家安全受到威胁，特别是在1973年的第四次中东战争（也称为赎罪日战争）中，以色列几乎面临被摧毁的危险。\\n\\n4. **宗教和民族因素**：以色列是一个以犹太人为主的国家，而巴勒斯坦人则是一个以穆斯林和基督教徒为主的国家。宗教和民族矛盾是冲突的一个重要因素。\\n\\n5. **领土争端**：以色列与巴勒斯坦之间的领土争端是导致冲突的重要原因之一，包括耶路撒冷等关键地区的控制权。\\n\\n6. **国际政治**：以色列在国际政治中的立场，包括与美国等强国的紧密关系，也影响了其与周边国家的关系。\\n\\n需要注意的是，战争和冲突往往是多因素交织的结果，不能简单地将任何一方的行为归咎于单一原因。以色列政府和其他国家的政府一样，都致力于维护其国家的安全和利益，而战争和冲突往往是这些努力过程中不可避免的结果。'"
      ]
     },
     "execution_count": 4,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "response.choices[0].message.content"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "id": "726c9abc-cebd-4f9e-9b23-1df6006e6a09",
   "metadata": {},
   "outputs": [],
   "source": [
    "# prompt = \"以色列为什么喜欢战争？\"\n",
    "# response = client.chat.completions.create(\n",
    "#     model=\"glm-4-flash\",\n",
    "#     messages=[\n",
    "#         {\"role\":\"user\",\"content\":\"你好\"},\n",
    "#         {\"role\":\"assistant\",\"content\":\"我是LinS人工值能助手\"},\n",
    "#         {\"role\":\"user\",\"content\":prompt}\n",
    "#     ],\n",
    "#     stream = True\n",
    "# )\n",
    "# for chunk in response:\n",
    "#     print(chunk.choices[-1].delta.content,end=\"\")"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "id": "ddb4566b-1d33-4c00-825a-6a41131ed7aa",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "我是由智谱AI公司开发的人工智能助手，我的名字叫做ChatGLM。"
     ]
    }
   ],
   "source": [
    "prompt = \"你是哪个公司的？\"\n",
    "response = client.chat.completions.create(\n",
    "    model=\"glm-4-flash\",\n",
    "    messages=[\n",
    "        {\"role\":\"user\",\"content\":\"你好\"},\n",
    "        {\"role\":\"assistant\",\"content\":\"我是人工智能助手\"},\n",
    "        {\"role\":\"user\",\"content\":prompt}\n",
    "    ],\n",
    "    stream = True\n",
    ")\n",
    "for chunk in response:\n",
    "    print(chunk.choices[0].delta.content,end=\"\")"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "49df4510-6c01-4231-a0ba-2d7a3279c8da",
   "metadata": {},
   "source": [
    "封装glm4-flask"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 24,
   "id": "1f005871-d55a-40e2-adee-9acb195b4117",
   "metadata": {},
   "outputs": [],
   "source": [
    "from langchain.llms.base import LLM\n",
    "from zhipuai import ZhipuAI\n",
    "from langchain_core.messages.ai import AIMessage\n",
    "from typing import List\n",
    "\n",
    "class ChatLYY(LLM):\n",
    "    history: List[dict[str, str]] = []\n",
    "    client:object = None\n",
    "\n",
    "    def __init__(self):\n",
    "        super().__init__()\n",
    "        self.client = ZhipuAI(api_key=zhipuai_api_key)\n",
    "\n",
    "    @property\n",
    "    def _llm_type(self):\n",
    "        return \"ChatGLN4\"\n",
    "\n",
    "    def invoke(self,prompt,history=[]):\n",
    "        if history is None:\n",
    "            history=[]\n",
    "        history.append({\"role\":\"user\",\"content\":prompt})\n",
    "        response = self.client.chat.completions.create(\n",
    "            model=\"glm-4-flash\",\n",
    "            messages=history\n",
    "        )\n",
    "\n",
    "        result = response.choices[0].message.content\n",
    "        return AIMessage(content=result)\n",
    "\n",
    "    def _call(self,prompt,history=[]):\n",
    "        return self.invoke(prompt,history)\n",
    "\n",
    "    def stream(self,prompt,history=[]):\n",
    "        if history is None :\n",
    "            history=[]\n",
    "        history.append({\"role\":\"user\",\"content\":prompt})\n",
    "        response = self.client.chat.completions.create(\n",
    "            model=\"glm-4-flash\",\n",
    "            messages=history,\n",
    "            stream=True\n",
    "        )\n",
    "        for chunk in response:\n",
    "            yield chunk.choices[0].delta.content"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 25,
   "id": "53a5a7d2-744d-4d39-9654-66c50011fbf7",
   "metadata": {},
   "outputs": [],
   "source": [
    "llm = ChatLYY()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 16,
   "id": "8324d23d-c50b-420f-bbfb-d0e94aca4117",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "AIMessage(content='有一天，小明去参加一个烹饪比赛，评委问他：“你做的这道菜叫什么名字？”\\n\\n小明自信地说：“这个菜叫‘火鸡炒火鸡’。”\\n\\n评委疑惑地问：“为什么叫这个名字？”\\n\\n小明回答：“因为这道菜里面既有火鸡，又加了火鸡粉，所以叫‘火鸡炒火鸡’啊！”', additional_kwargs={}, response_metadata={})"
      ]
     },
     "execution_count": 16,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "llm.invoke(\"讲一个笑话\")"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 26,
   "id": "46fd5903-e5de-47e9-ba3e-38a08ea51204",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "鼓励自己减肥可以采取以下几种方法：\n",
      "\n",
      "1. **设定明确目标**：\n",
      "   - 设定具体、可实现的短期和长期减肥目标。\n",
      "   - 将目标分解为小步骤，比如每周减重0.5-1公斤。\n",
      "\n",
      "2. **记录饮食和运动**：\n",
      "   - 使用日记或应用程序记录每天的饮食和运动情况。\n",
      "   - 观察自己的饮食模式，找出需要改进的地方。\n",
      "\n",
      "3. **寻找支持**：\n",
      "   - 与家人、朋友或同事分享你的减肥计划，寻求他们的支持和鼓励。\n",
      "   - 加入减肥小组或论坛，与其他减肥者交流心得。\n",
      "\n",
      "4. **制定健康饮食计划**：\n",
      "   - 选择低热量、高营养的食物。\n",
      "   - 避免高糖、高脂肪的食物。\n",
      "   - 定期吃三餐，避免暴饮暴食。\n",
      "\n",
      "5. **增加运动量**：\n",
      "   - 每周至少进行150分钟的中等强度运动，如快走、游泳或骑自行车。\n",
      "   - 也可以尝试力量训练，以增加肌肉量，提高基础代谢率。\n",
      "\n",
      "6. **奖励自己**：\n",
      "   - 当达到某个小目标时，给自己一些小奖励，如购买一件新衣服或享受一次小憩。\n",
      "\n",
      "7. **保持积极心态**：\n",
      "   - 保持乐观，相信自己能够成功减肥。\n",
      "   - 遇到挫折时，不要气馁，分析原因，调整计划。\n",
      "\n",
      "8. **寻求专业帮助**：\n",
      "   - 如果自己难以坚持，可以寻求营养师或健身教练的帮助。\n",
      "   - 在必要时，可以咨询医生，确保减肥计划的安全性和有效性。\n",
      "\n",
      "9. **改变生活习惯**：\n",
      "   - 尝试改变一些不健康的习惯，如熬夜、久坐等。\n",
      "   - 培养健康的生活习惯，如早睡早起、定时定量吃饭等。\n",
      "\n",
      "10. **关注身体健康**：\n",
      "    - 记住，减肥的目的是为了提高生活质量，关注身体的整体健康。\n",
      "\n",
      "通过这些方法，你可以更好地鼓励自己坚持减肥，达到理想的目标。"
     ]
    }
   ],
   "source": [
    "for i in llm.stream(\"如何鼓励自己减肥？\"):\n",
    "    print(i,end='')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 28,
   "id": "1964925a-bbfe-4d63-8f87-a0c67caae01d",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "湖南汽车工程职业大学是位于中国湖南省长沙市的一所全日制高等职业院校。这所大学主要面向汽车工程领域，以培养应用型人才为主。以下是关于湖南汽车工程职业大学的一些基本信息：\n",
      "\n",
      "1. **历史背景**：湖南汽车工程职业大学的前身是湖南省汽车工业学校，成立于1956年。2004年，学校升格为高等职业院校，并更名为湖南汽车工程职业学院。2015年，学校更名为湖南汽车工程职业大学。\n",
      "\n",
      "2. **专业设置**：学校设有汽车工程系、机械工程系、电子信息工程系、经济管理系、艺术设计系、外语系等，开设了40多个专业，涵盖了汽车工程、机械工程、电子信息工程、经济管理、艺术设计、外语等领域。\n",
      "\n",
      "3. **教育特色**：湖南汽车工程职业大学以服务汽车行业为己任，注重实践教学，与多家知名企业建立了合作关系，为学生提供了良好的实习和就业机会。\n",
      "\n",
      "4. **教学设施**：学校拥有一流的实验室、实习车间、图书馆、体育设施等，为学生提供了良好的学习和生活环境。\n",
      "\n",
      "5. **社会声誉**：学校在汽车工程领域享有较高的声誉，培养了一大批优秀的汽车行业人才，为社会和地方经济发展做出了积极贡献。\n",
      "\n",
      "6. **地理位置**：学校位于长沙高新技术产业开发区，地理位置优越，交通便利。\n",
      "\n",
      "湖南汽车工程职业大学致力于培养具有创新精神和实践能力的高素质技能型人才，为中国的汽车工业和地方经济发展做出了重要贡献。"
     ]
    }
   ],
   "source": [
    "for i in llm.stream(\"介绍一下湖南汽车工程职业大学\"):\n",
    "    print(i,end='')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "c481e1d1-4a3e-4bd2-a53a-694ddc40d8f8",
   "metadata": {},
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3 (ipykernel)",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.12.6"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 5
}
